安卓 : Getting RuntimeException on AsyncTask

标签 android android-emulator android-asynctask runtimeexception

在代码中,我尝试使用 http 客户端读取 Web 服务。然后我想将 http 响应的响应短语写入 TextView 。用户界面是通过 onPostExecute() 访问的,所以我不知道为什么会出现此异常。

这是代码:

public class CustomersScreen extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.customersscreen);
}

public void LoginClicked(View view) {
    new Get_data().execute("http://localhost:51982/WcfDataService1.svc/Genre");
}

private class Get_data extends AsyncTask <String, Void, String> {

    @Override
    protected String doInBackground(String... url) {
        //InputStream instream = null;
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet request = new HttpGet(url[0]);
        HttpResponse response = null;
        try {
            response = httpclient.execute(request);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String phrase = response.getStatusLine().getReasonPhrase();

        return phrase;
    }

    @Override
    protected void onPostExecute(String phrase) {
        TextView t = (TextView) findViewById(R.id.textView3);
        t.setText(phrase);
    }

}

和日志猫:

09-28 09:43:34.239: E/AndroidRuntime(679): FATAL EXCEPTION: AsyncTask #1
09-28 09:43:34.239: E/AndroidRuntime(679): java.lang.RuntimeException: An error occured while executing doInBackground()
09-28 09:43:34.239: E/AndroidRuntime(679):  at android.os.AsyncTask$3.done(AsyncTask.java:278)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-28 09:43:34.239: E/AndroidRuntime(679):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.lang.Thread.run(Thread.java:856)
09-28 09:43:34.239: E/AndroidRuntime(679): Caused by: java.lang.NullPointerException
09-28 09:43:34.239: E/AndroidRuntime(679):  at com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:46)
09-28 09:43:34.239: E/AndroidRuntime(679):  at com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:1)
09-28 09:43:34.239: E/AndroidRuntime(679):  at android.os.AsyncTask$2.call(AsyncTask.java:264)
09-28 09:43:34.239: E/AndroidRuntime(679):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-28 09:43:34.239: E/AndroidRuntime(679):  ... 5 more

最佳答案

Caused by: java.lang.NullPointerException
09-28 09:43:34.239: E/AndroidRuntime(679):  at com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:46)

你在类(class)的第 46 行有一个 NPE。发布的代码显然缺少一些行,但我想是这一行 String phrase = response.getStatusLine().getReasonPhrase();作为response将是 null如果 httpclient.execute(request); 出现任何问题

所以,只需将该行放在 try/catch 中也阻止并添加一个简单的 return null;而是在方法的末尾。

关于安卓 : Getting RuntimeException on AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12640470/

相关文章:

java - Android-Java.io.Exception : content Length error Expected x amount of memeory got y amount

java - 为什么 LinearLayout 子 getWidth 方法返回 0?

android.content.Context 与 android.app.Activity

Android:如何使用 Volley 从方法返回异步 JSONObject?

android - 在 AsyncTask 中获取/使用 Context 的最佳方式是什么?

java - 在布局中找不到符号变量。如何解决这个问题?

android - 将 menuItem.setIntent 与 onOptionsItemSelected 混合使用不起作用

Android Studio 模拟器 : Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

android - 是否可以在 android 模拟器上测试离线模式?

android - Visual Studio 无法识别模拟器 (AVD)