java - Android 应用程序不从 MYSQL 获取数据

标签 java php android mysql json

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

{"ID":"1","mobileName":"Nokia","mobileModel":"NA-85","mobilePrice":"8500"}。

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

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

日志:

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)

主 Activity .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);
}
}

最佳答案

问题出在您的免费服务器中,这意味着您的在线 Web 服务器将 cookie 发送到未处理的 android。现在您可以使用除 base.pk,byethost.com 以外的其他虚拟主机站点。使用 ueuo.com 摆脱这些问题。

关于java - Android 应用程序不从 MYSQL 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185467/

相关文章:

android - 如何在 Android 中将整个 ListView 保存为图像?

java - Android - Firebase : code equivalent to list all users of databasereference as swift

java - 如何处理 Selenium 中动态变化的 ID

java - Play Framework 为一个 html 页面渲染多个 View

java.lang.IllegalArgumentException,我在游戏商店的崩溃报告中得到了这个异常,建议我如何解决这个问题......

javascript - 使用 select 过滤数据库

php - 使用 Doctrine 在 Symfony2 中进行非常低效的 DQL 查询。需要改进

Java、JDBC INSERT ON DUPLICATE KEY UPDATE 通配符

javascript - 如何将 Laravel 变量传递到我的 AngularJS View 中?

java - RxAndroid 链式操作