如果你想写一个文件,AsyncTask如何工作?

时间:2015-08-05 13:09:15

标签: java android android-asynctask

首先抱歉我的英语,而且我是Android和Android的新手。 Java等等不要评判我。

我可以从我正在做的Get请求中读取JSON文件,但是 我想在内部存储器设备的某处写一个文件中的响应。我不知道如何处理异步任务因为我有错误已经显示下来。有人可以告诉我我做错了什么?!

    <?php 
    # ...

      function display($tpl = null) {
        # ...

        # Edit : Set the default layout to 'lol'
        $layout = JRequest::getWord('layout', '');
        if (empty($layout)) $this->setLayout("lol");

        // Display the view
        parent::display($tpl);
      }

    # ...

提前致谢:)!

08-05 15:06:14.305    3302-3317/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: shapp.odk.org.shapp, PID: 3302
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:304)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference
        at shapp.odk.org.shapp.RequestHandlerApi.doInBackground(RequestHandlerApi.java:58)
        at shapp.odk.org.shapp.RequestHandlerApi.doInBackground(RequestHandlerApi.java:18)
        at android.os.AsyncTask$2.call(AsyncTask.java:292)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:
        at java.lang.Thread.run(Thread.java:818)

1 个答案:

答案 0 :(得分:3)

你的 contextMain为空你可以做的是创建一个构造函数并将活动上下文传递给它然后使用它

将您的来电更改为

 new RequestHandlerApi(Your_Activty_Name.this).execute("your url here");

然后在RequestHandlerApi类中创建一个构造函数

hen创建一个构造函数并创建一个变量Context上下文;

 public RequestHandlerApi(Context context){
   this.contextMain =context;
} 

现在您的contextMain不为空。