gpt4 book ai didi

java - 关闭android程序立即运行json中的应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:19 27 4
gpt4 key购买 nike

大家好,我编写了一个程序来从服务器获取数据并使用 json 在 ListView 中显示数据但是当我启动应用程序时,应用程序立即关闭。我检查了我的 list ,没问题,不知道该怎么办,请帮助我!

主要 Activity 代码:

package com.example.delta.travel;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class MainActivity extends ListActivity {

private ProgressDialog pd;
JSONParser jParser=new JSONParser();
ArrayList<HashMap<String,String>> P;
JSONArray s=null;
private final String url="http://192.168.1.4/upload/travel.php";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

new travel().execute();

}

class travel extends AsyncTask<String,String,String>{

@Override
protected void onPreExecute() {
super.onPreExecute();
pd=new ProgressDialog(MainActivity.this);
pd.setMessage("login");
pd.show();
}

@Override
protected String doInBackground(String... params) {

List<NameValuePair> parms=new ArrayList<>();
JSONObject json=jParser.makeHTTPRequest(url,"GET",parms);
try {
int t=json.getInt("t");
if(t==1){
s=json.getJSONArray("travel");
for(int i=0;i<s.length();i++){
JSONObject c=s.getJSONObject(i);
String companyname=c.getString("companyname");
String cod=c.getString("cod");
String bign=c.getString("bign");
String stop=c.getString("stop");
String date=c.getString("date");
String time=c.getString("time");
String price=c.getString("price");

HashMap<String,String>map=new HashMap<String,String>();
map.put("companyname",companyname);
map.put("cod",cod);
map.put("bign",bign);
map.put("stop",stop);
map.put("date",date);
map.put("time",time);
map.put("price",price);

P.add(map);

}
}else {
Toast.makeText(MainActivity.this,"No DataFound",Toast.LENGTH_SHORT).show();
}


} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
pd.dismiss();
runOnUiThread(new Runnable() {
@Override
public void run() {
ListAdapter adapter = new SimpleAdapter(MainActivity.this, P, R.layout.item_list,
new String[]{"companyname", "cod", "bign", "stop", "date", "time", "price"},
new int[]{R.id.companyname, R.id.cod, R.id.bign, R.id.stop, R.id.date, R.id.time1, R.id.price});
setListAdapter(adapter);
}
});

}
}
}

我的 JSONParser 代码:

package com.example.delta.travel;

import android.net.http.HttpResponseCache;
import android.util.Log;

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.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.Date;
import java.util.List;

/**
* Created by delta on 5/28/2016.
*/
public class JSONParser {

static InputStream is=null;
static JSONObject jObj=null;
static String json="";

// constructor
public JSONParser(){

}

// function get json from url
// by making HTTP POST or GET method
public JSONObject makeHTTPRequest(String url,String method,
List<NameValuePair> params){

//making HTTP request
try{
//check for request method
if(method=="POST"){
// request method is POST
//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();
}else if(method=="GET"){
//request method is GET
DefaultHttpClient httpClient=new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params,"utf-8");
url+="?"+paramString;
HttpGet httpGet=new HttpGet(url);

HttpResponse httpResponse=httpClient.execute(httpGet);
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();
}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;


}


}

和我的travel.php代码:

 <?php

$con=mysqli_connect("localhost","root","","travels");
mysqli_set_charset($con,"utf8");
$response=array();


$result=mysqli_query($con,"select * from travel");

if(mysqli_num_rows($result)>0){
while($row=mysqli_fetch_array($result)){
$temp=array();
$temp["companyname"]=$row["companyname"];
$temp["cod"]=$row["cod"];
$temp["bign"]=$row["bign"];
$temp["stop"]=$row["stop"];
$temp["date"]=$row["date"];
$temp["time"]=$row["time"];
$temp["price"]=$row["price"];

$response["travel"]=array();

array_push($response["travel"],$temp);
}

$response["t"]=1;
echo json_encode($response);

}
else{

$response["t"]=0;
$response["message"]="Not Found";
echo json_encode($response);

}

?>

最佳答案

1) 使用此代码更改 JSONParser 类中的代码。仅使用此小说。

 public JSONObject makeHTTPRequest(String urlString, String method) {

if(method.equals("POST")){

URL url = null;
try {
url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/json");

BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
StringBuilder sb = new StringBuilder();
while ((output = br.readLine()) != null) {
sb.append(output);
}
conn.disconnect();
json = sb.toString();

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}else if(method.equals("GET")){
URL url = null;
try {
url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");

BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
StringBuilder sb = new StringBuilder();
while ((output = br.readLine()) != null) {
sb.append(output);
}
conn.disconnect();
json = sb.toString();

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

try {
jObj = new JSONObject(json);
} catch (JSONException e) {
e.printStackTrace();
}

return jObj;
}

2) 在 MainActivity 中你必须添加 P = new ArrayList<>();在 onCreate() 方法中像这样。

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
P = new ArrayList<>();
new travel().execute();

}

这一切都在我身边完成。它肯定也适合你。

关于java - 关闭android程序立即运行json中的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37497248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com