首页 文章

doinbackground中的异常,同时asynctask [复制]

提问于
浏览
0

这个问题在这里已有答案:

MainActivity.java

public class MainActivity extends AppCompatActivity {

   Button clickButton;
   protected void onCreate(Bundle savedInstanceState)
   {

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       clickButton = (Button) findViewById(R.id.clickButton);
       clickButton.setOnClickListener(new View.OnClickListener()
       {
           public void onClick(View v)
           {

              String serverURL= ""
              new MyClass().execute("serverURL");
           }
       });

    private class MyClass extends AsyncTask<String, Integer, String>
    {

        TextView output = (TextView) findViewById(R.id.textView1);
        private ProgressDialog Dialog = new    ProgressDialog(MainActivity.this);

        protected void onPreExecute() {

            output.setText("Output : ");
            Dialog.setMessage("Downloading source..");
            Dialog.show();
        }

        protected String doInBackground(String... urls)
        {
            HttpResponse<JsonNode> response=null;
            try {
            }


            response = Unirest.post("https://....?api_key=""&api_secret=")
                    .header("X-Mashape-Key", "")
                    .header("Content-Type", "application/x-www-form-
                            urlencoded")
                                    .header("Accept", "application/json")
                                    .field("attributes", "all")
                                    .field("detector", "Aggressive")
                                    .field("urls", urls[0])
                                    .asJson();


        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return response.toString();


    }

protected void onProgressUpdate(Integer...integers) {
}

protected void onPostExecute(String response) {
    output = (TextView) findViewById(R.id.textView1);
    output.setText(response);
}

}
}

错误

在java.util.concurrent.FutureTask $ Sync.innerSetException(java.util.concurrent.FutureTask中的FutureTask.jav)上,在android.os.AsyncTask $ 3.done(AsyncTask.java:299)上执行doInBackground()时发生错误 . setExcept at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307)at java.util.concurrent.FutureTask.run(FutureTask.java:137)at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask) .java:230):执行doInBackground()时发生错误android.os.AsyncTask $ 3.done(AsyncTask.java:299)java.util.concurrent.FutureTask java.util.concurrent.FutureTask.setException $ Sync.innerSetException (FutureTask.java:124)java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307)at java.util.concurrent.FutureTask.run(FutureTask.java:137)at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)在java.lang.Thread.run(Thread.java:856)产生的原因:在com.mashape.unirest.http.HttpClientHelper.prepareRequest java.lang.ExceptionInInitializerError(HttpClientHelper.java:151)在com.mashape.unirest.http .HttpClientHelper.request(HttpClientHelper.java:131)在com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68)在com.example.preeti.button.MainActivity $ MyClass.doInBackground(MainActivity.java:91 )at com.example.preeti.button.MainActivity $ MyClass.doInBackground(MainActivity.java:60)at android.os.AsyncTask $ 2.call(AsyncTask.java:287)at java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:305)在java.util.concurrent.ThreadPoolExecutor的android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)java.util.concurrent.FutureTask.run(FutureTask.java:137) .runWorker(ThreadPoolExecutor.java:1076)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)at java.lang.Thread.run(Thread.java:856)引起:java.lang . NoClassDefFoundError:o com.mashape.unirest.http.options.Options.refresh(Options.java:70)中的rg.apache.http.client.config.RequestConfig位于com.mashape.unirest.http.options.Options . (Options.java: 46)在com.mashape.unirest.http.HttpClientHelper.prepareRequest(HttpClientHelper.java:151)在com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:131)在com.mashape.unirest.request.BaseRequest .asJson(BaseRequest.java:68)在com.example.preeti.button.MainActivity $ MyClass.doInBackground(MainActivity.java:91)在com.example.preeti.button.MainActivity $ MyClass.doInBackground(MainActivity.java:60 )at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)at java.util.concurrent.FutureTask.run(FutureTask.java)的android.os.AsyncTask $ 2.call(AsyncTask.java:287) :137)在android.os.AsyncTask $ SerialExecutor $ 1.run(在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run AsyncTask.java:230)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) (ThreadPoolExecutor.java:569)at java.lang.Thread.run(Thread.java:856)

Build.gradle

apply plugin: 'com.android.application'


android {
compileSdkVersion 23
buildToolsVersion "24.0.0"

defaultConfig {
    applicationId "com.example.preeti.button"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
    }}
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.github.mhendred.face4j:face4j-core:1.6.2'
compile 'com.mashape.unirest:unirest-java:1.4.9'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'org.json:json:20140107'
compile 'org.apache.httpcomponents:httpcomponents-client:4.5.2'
compile 'com.loopj.android:android-async-http:1.4.9'



}

2 回答

  • 0

    似乎Mashape仍在使用已弃用的Apache HTTP-Library . 您可以将target-SDK减少到22或包含

    android {
        useLibrary 'org.apache.http.legacy'
    }
    

    在你的应用程序build.gradle文件中,如果这是原因 .

  • 0

    引起:java.lang.NoClassDefFoundError:
    org.apache.http.client.config.RequestConfig

    com.mashape.unirest.http.options.Options.refresh(Options.java:70)

    unirest试图从不存在的apache http客户端访问一个类 . 找到一个版本的unirest,它可以运行apache http客户端或其他方式 .

    还将失败的代码放在 try { ... } 中 .

    UPDATE

    以下是来自pom file的unirest 1.4.9的依赖关系 . 尝试将它们添加到项目依赖项中 .

    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpasyncclient</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160212</version>
        </dependency>
    </dependencies>
    

    这将使您的依赖项看起来像这样:

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.4.0'
        compile 'com.github.mhendred.face4j:face4j-core:1.6.2'
        compile 'com.mashape.unirest:unirest-java:1.4.9'
        compile 'com.google.android.gms:play-services-appindexing:8.1.0'
        compile 'com.loopj.android:android-async-http:1.4.9'
        compile 'org.json:json:20160212'
        compile 'org.apache.httpcomponents:httpclient:4.5.2'
        compile 'org.apache.httpcomponents:httpasyncclient:4.1.1'
        compile 'org.apache.httpcomponents:httpmime:4.5.2'
    }
    

    注意最后4行 .

    UPDATE 2

    有2个问题 . org.jsonorg.apache.http.client 已经是Android API的一部分 .

    This link显示了如何在android上使用 unirest-java .

    我认为你正在处理大量的垃圾 . 也许考虑在Android上使用 unirest-java 以外的东西 .

相关问题