Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android异步任务与PHP不工作_Java_Android_Json_Android Asynctask - Fatal编程技术网

Java Android异步任务与PHP不工作

Java Android异步任务与PHP不工作,java,android,json,android-asynctask,Java,Android,Json,Android Asynctask,为了这个问题,我已经被困了好几个星期了 我正在使用AsynTask将数据发送到php并接收要打印的名称 但它显示了这个错误,有人来帮忙吗 12-29 19:34:12.623: D/dalvikvm(799): GC_CONCURRENT freed 188K, 11% free 2629K/2948K, paused 25ms+61ms, total 218ms 12-29 19:34:13.282: D/gralloc_goldfish(799): Emulator without GPU

为了这个问题,我已经被困了好几个星期了 我正在使用AsynTask将数据发送到php并接收要打印的
名称
但它显示了这个错误,有人来帮忙吗

12-29 19:34:12.623: D/dalvikvm(799): GC_CONCURRENT freed 188K, 11% free 2629K/2948K, paused 25ms+61ms, total 218ms
12-29 19:34:13.282: D/gralloc_goldfish(799): Emulator without GPU emulation detected.
12-29 19:34:42.132: W/System.err(799): java.lang.NullPointerException
12-29 19:34:42.164: W/System.err(799):  at android.app.Activity.findViewById(Activity.java:1839)
12-29 19:34:42.164: W/System.err(799):  at com.example.myweb.MainActivity.afterEffect(MainActivity.java:64)
12-29 19:34:42.164: W/System.err(799):  at com.example.myweb.toPHP.onPreExecute(toPHP.java:47)
12-29 19:34:42.164: W/System.err(799):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
12-29 19:34:42.164: W/System.err(799):  at android.os.AsyncTask.execute(AsyncTask.java:534)
12-29 19:34:42.164: W/System.err(799):  at com.example.myweb.MainActivity$1.onClick(MainActivity.java:54)
12-29 19:34:42.172: W/System.err(799):  at android.view.View.performClick(View.java:4204)
12-29 19:34:42.172: W/System.err(799):  at android.view.View$PerformClick.run(View.java:17355)
12-29 19:34:42.172: W/System.err(799):  at android.os.Handler.handleCallback(Handler.java:725)
12-29 19:34:42.185: W/System.err(799):  at android.os.Handler.dispatchMessage(Handler.java:92)
12-29 19:34:42.185: W/System.err(799):  at android.os.Looper.loop(Looper.java:137)
12-29 19:34:42.192: W/System.err(799):  at android.app.ActivityThread.main(ActivityThread.java:5041)
12-29 19:34:42.212: W/System.err(799):  at java.lang.reflect.Method.invokeNative(Native Method)
12-29 19:34:42.212: W/System.err(799):  at java.lang.reflect.Method.invoke(Method.java:511)
12-29 19:34:42.212: W/System.err(799):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-29 19:34:42.222: W/System.err(799):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-29 19:34:42.222: W/System.err(799):  at dalvik.system.NativeStart.main(Native Method)
JSONParser.java

 package com.example.myweb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    // constructor
    public JSONParser() {
    }
    public JSONObject getJSONFromUrl(String url, List params) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
            }
            is.close();
            json = sb.toString();
            Log.e("JSON", json);
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
        // return JSON String
        return jObj;
    }
}
 package com.example.myweb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;

public class toPHP extends AsyncTask {

    MainActivity main = new MainActivity();
    private JSONParser jsonParser;
    String email,password;
    EditText emailBox;
    EditText passwordBox;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        main.afterEffect("sending...");
        emailBox = (EditText) main.findViewById(R.id.email);
        passwordBox = (EditText) main.findViewById(R.id.password);
        email = emailBox.getText().toString();
        password = passwordBox.getText().toString();    
    }
    protected JSONObject doInBackground(String... args) {
        toPHP userFunction = new toPHP();
        JSONObject json = null;
        try {
            json = userFunction.getUserLoggedIn(email, password);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return json;        
     }


    public JSONObject getUserLoggedIn(String email,String password) throws ClientProtocolException, IOException, JSONException{
        JSONObject json = null;
        /*
        HttpClient client = new DefaultHttpClient();
        HttpPost  post = new HttpPost("http://localhost/testand.php");
        */
        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
        pairs.add(new BasicNameValuePair("email", email));
        pairs.add(new BasicNameValuePair("password", password));
        //post.setEntity(new UrlEncodedFormEntity(pairs));
        //HttpResponse response = client.execute(post);
        //HttpEntity resEntity = response.getEntity();

        //if (resEntity != null) {

            //String responseStr = EntityUtils.toString(resEntity).trim();

            json = jsonParser.getJSONFromUrl("http://localhost/testand.php", pairs);



        //}     
        return json;
    }

    protected void onPostExecute(JSONObject json) throws JSONException {
        String myName = json.getString("name");
        String str = myName + ", Welcome to Socionet. :) ";
        main.afterEffect(str);
    }
    @Override
    protected Object doInBackground(Object... params) {
        // TODO Auto-generated method stub
        return null;
    }

}
package com.example.myweb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;

public class MainActivity extends Activity {
    Button button;
    EditText emailBox;
    EditText passwordBox;
    String emailId;
    String passwordId;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.login1);
        emailBox   = (EditText)findViewById(R.id.email);
        passwordBox   = (EditText)findViewById(R.id.password);

       button.setOnClickListener(new Button.OnClickListener()   {             
           public void onClick(View v)  {               
            try {
               new toPHP().execute();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();                    
            }               
           }  
         });
       }
    public void afterEffect(String str){

        TextView textV1 = (TextView)findViewById(R.id.textV1);
        textV1.setText(str);        

    }
}
toPHP.java

 package com.example.myweb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    // constructor
    public JSONParser() {
    }
    public JSONObject getJSONFromUrl(String url, List params) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
            }
            is.close();
            json = sb.toString();
            Log.e("JSON", json);
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
        // return JSON String
        return jObj;
    }
}
 package com.example.myweb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;

public class toPHP extends AsyncTask {

    MainActivity main = new MainActivity();
    private JSONParser jsonParser;
    String email,password;
    EditText emailBox;
    EditText passwordBox;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        main.afterEffect("sending...");
        emailBox = (EditText) main.findViewById(R.id.email);
        passwordBox = (EditText) main.findViewById(R.id.password);
        email = emailBox.getText().toString();
        password = passwordBox.getText().toString();    
    }
    protected JSONObject doInBackground(String... args) {
        toPHP userFunction = new toPHP();
        JSONObject json = null;
        try {
            json = userFunction.getUserLoggedIn(email, password);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return json;        
     }


    public JSONObject getUserLoggedIn(String email,String password) throws ClientProtocolException, IOException, JSONException{
        JSONObject json = null;
        /*
        HttpClient client = new DefaultHttpClient();
        HttpPost  post = new HttpPost("http://localhost/testand.php");
        */
        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
        pairs.add(new BasicNameValuePair("email", email));
        pairs.add(new BasicNameValuePair("password", password));
        //post.setEntity(new UrlEncodedFormEntity(pairs));
        //HttpResponse response = client.execute(post);
        //HttpEntity resEntity = response.getEntity();

        //if (resEntity != null) {

            //String responseStr = EntityUtils.toString(resEntity).trim();

            json = jsonParser.getJSONFromUrl("http://localhost/testand.php", pairs);



        //}     
        return json;
    }

    protected void onPostExecute(JSONObject json) throws JSONException {
        String myName = json.getString("name");
        String str = myName + ", Welcome to Socionet. :) ";
        main.afterEffect(str);
    }
    @Override
    protected Object doInBackground(Object... params) {
        // TODO Auto-generated method stub
        return null;
    }

}
package com.example.myweb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;

public class MainActivity extends Activity {
    Button button;
    EditText emailBox;
    EditText passwordBox;
    String emailId;
    String passwordId;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.login1);
        emailBox   = (EditText)findViewById(R.id.email);
        passwordBox   = (EditText)findViewById(R.id.password);

       button.setOnClickListener(new Button.OnClickListener()   {             
           public void onClick(View v)  {               
            try {
               new toPHP().execute();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();                    
            }               
           }  
         });
       }
    public void afterEffect(String str){

        TextView textV1 = (TextView)findViewById(R.id.textV1);
        textV1.setText(str);        

    }
}
更新1

@hasan83修复后的新错误

12-29 21:38:27.588: W/dalvikvm(1283): threadid=11: thread exiting with uncaught exception (group=0x40a71930)
12-29 21:38:27.748: E/AndroidRuntime(1283): FATAL EXCEPTION: AsyncTask #1
12-29 21:38:27.748: E/AndroidRuntime(1283): java.lang.RuntimeException: An error occured while executing doInBackground()
12-29 21:38:27.748: E/AndroidRuntime(1283):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at java.lang.Thread.run(Thread.java:856)
12-29 21:38:27.748: E/AndroidRuntime(1283): Caused by: java.lang.NullPointerException
12-29 21:38:27.748: E/AndroidRuntime(1283):     at com.example.myweb.toPHP.getUserLoggedIn(toPHP.java:99)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at com.example.myweb.toPHP.doInBackground(toPHP.java:67)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at com.example.myweb.toPHP.doInBackground(toPHP.java:1)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-29 21:38:27.748: E/AndroidRuntime(1283):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-29 21:38:27.748: E/AndroidRuntime(1283):     ... 4 more

无法在异步任务中创建新的MainActivity。在MainActivity中时,将活动传递给AsyncTask的构造函数。您将能够在onPreExecute()方法中获取并更新视图

在你的活动中:

new toPHP(MainActivity.this).execute();

添加构造函数,以便可以将当前MainActivity传递到AsyncTask

public class toPHP extends AsyncTask {

    final MainActivity main;

    public toPHP(MainActivity main) {
        this.main = main;
    }
    ...
那就这样打电话吧

 button.setOnClickListener(new Button.OnClickListener()   {             
       public void onClick(View v)  {               
        try {
           new toPHP(MainActivity.this).execute();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();                    
        }               
       }  
     });
   }

错误表示找不到id为R.id.textV1的TextView。确保它在内容视图中可用:R.layout.activity\u main


但主要问题是,为什么要在异步任务中执行此操作。它应该通过引用从实际活动中传递。

要点:

  • onPostExecute
    doInBackground
    方法之前,我没有看到
    @Override
    关键字
  • onPreExecute
    中的代码移动到
    doInBackground
  • 将主活动作为
    AsynkTask
    execute方法的参数发送
  • 在do Doin背景上捕捉活动
  • 不要声明toPhp的对象,只需调用
    getUserLoggedIn
    。你在同一个班
  • 就这样

    new toPHP().execute(MainActivity.this);
    
    @Override
    protected Object doInBackground(Object... args) {
    
        main = (MainActivity) args[0];
        main.afterEffect("sending...");
        emailBox = (EditText) main.findViewById(R.id.email);
        passwordBox = (EditText) main.findViewById(R.id.password);
        email = emailBox.getText().toString();
        password = passwordBox.getText().toString();
        ..
    }
    

    第四个可能的复制品是doInBackground方法的第一行。你是一个marskmen家伙!但是我在
    onPreExecute()
    中保留了什么呢?实际在后台工作的方法和启动http请求所需的方法是doInBackground。“方法的逻辑名称:)”。OnPreecute在冻结UI的主线程上执行工作。您应该将onPreExecute中的代码移动到doInBackground。我相信在您的情况下,onPreExecute不会给您带来好处。因为您只能在doInBackground方法中获取主活动。execute方法发送到doInBackground的参数。没有,我更新了答案中的一个词。也不要忘记@Override关键字。