Android应用无法从MYSQL

时间:2016-03-23 18:00:57

标签: java php android mysql json

我是android新手。我遇到的问题是当我运行我的应用程序时,它不显示从mysql在线服务器获取数据。虽然我的PHP脚本很好,因为当我在浏览器中打开我的PHP脚本链接时,它显示了这个JSON字符串

{" ID":" 1"" mobileName":"诺基亚"" mobileModel":& #34; NA-85"" mobilePrice":" 8500"}。

但是当我从我的Android应用程序调用此脚本时,该应用程序在我的真实设备或模拟器上运行,它会在该行显示错误。

int mobid = json.getInt("ID");

logcat:

03-23 22:38:29.151    1918-2302/com.example.abdul.sql E/Buffer Error﹕ Error  converting result org.json.JSONException: Value <html><body><script of type   java.lang.String cannot be converted to JSONObject
03-23 22:38:29.242    1918-1918/com.example.abdul.sql D/AndroidRuntime﹕  Shutting down VM
--------- beginning of crash
03-23 22:38:29.242    1918-1918/com.example.abdul.sql E/AndroidRuntime﹕ FATAL  EXCEPTION: main
Process: com.example.abdul.sql, PID: 1918
java.lang.NullPointerException: Attempt to invoke virtual method 'int  org.json.JSONObject.getInt(java.lang.String)' on a null object reference
        at  com.example.abdul.sql.MainActivity$Connectingdb.onPostExecute(MainActivity.java:172)
        at  com.example.abdul.sql.MainActivity$Connectingdb.onPostExecute(MainActivity.java:80)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

MainActivity.java

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.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
TextView tv;
String textview = null;
static JSONObject jObj ;
static String json = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView) findViewById(R.id.textView1);
    Button b2 = (Button) findViewById(R.id.button1);

    b2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

// TODO Auto-generated method stub

            Intent i2 = new Intent(MainActivity.this,menuList.class);
            startActivity(i2);

        }

    });
    Button connectdb = (Button) findViewById(R.id.button1);
    connectdb.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
// TODO Auto-generated method stub
            new Connectingdb().execute();
        }

    });
 }

 class Connectingdb extends AsyncTask<String, String, JSONObject> {
    /**

     * Before starting background thread Show Progress Dialog

     * */

    boolean failure = false;
    private ProgressDialog pDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Attempting connect...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();

    }
    @Override
    protected JSONObject doInBackground(String... args) {
        InputStream is = null;

// Making HTTP request

        try {
// check for request method

            {

// request method is POST

// defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new   HttpPost("http://codedefault.base.pk/products.php");
                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");

            }

            json = sb.toString();
            jObj = new JSONObject(json);
            is.close();
            return jObj;
        } catch (Exception e) {

            Log.e("Buffer Error", "Error converting result " + e.toString());
            return null;

        }
    }

    /**

     * After completing background task Dismiss the progress dialog

     * **/

    protected void onPostExecute(JSONObject json) {

        try {
            int mobid = json.getInt("ID");
            String mobilename = json.getString("mobileName");
            String mobileModel = json.getString("mobileModel");
            int mobilePrice = json.getInt("mobileprice");

            display("mobile Id= "+mobid+"\nmobileName = "+mobilename +"\n mobile model = "+mobileModel +"\n mobile price = "+mobilePrice+"\n>>>>>>>>>>>>>>>\n");


        } catch (JSONException e) {

// TODO Auto-generated catch block

            e.printStackTrace();

        }
        pDialog.dismiss();
    }
}
public void display(String m){
    tv.setText(m);
}
}

2 个答案:

答案 0 :(得分:0)

问题是你的服务器。 您看到的JSON字符串呈现在客户端。真正的源代码与您发布的普通字符串不同。 看看at the source code (sorry for the screenshot),以便更好地了解实际问题。

答案 1 :(得分:0)

问题在于您的免费服务器意味着您的在线Web服务器将cookie发送到未处理的android。现在您可以使用另一个网站托管站点而不是base.pk,byethost.com。使用ueuo.com摆脱这些问题。