Json 异步任务上的字符串请求
嗨,我想问一下,这里是否有人知道如何在AsyncTask上使用StringRequests。我已经试过了,但在执行后出现了错误 D/MyDebug:JSON数组org.JSON.JSONException上的错误:输入结束,位于的字符0处 这是我的密码Json 异步任务上的字符串请求,json,android-asynctask,Json,Android Asynctask,嗨,我想问一下,这里是否有人知道如何在AsyncTask上使用StringRequests。我已经试过了,但在执行后出现了错误 D/MyDebug:JSON数组org.JSON.JSONException上的错误:输入结束,位于的字符0处 这是我的密码 public class MarketsFragment extends Fragment { private static final String url="http://192.168.1.195/test/test.php"; priva
public class MarketsFragment extends Fragment {
private static final String url="http://192.168.1.195/test/test.php";
private static final String STARTING_TEXT ="";
private static String login = null;
private static String debug="MyDebug";
private View rootView;
private ListView lvMarkets;
public static MarketsFragment newInstance(String text)
{
Bundle args = new Bundle();
args.putString(STARTING_TEXT,text);
MarketsFragment marketsHome = new MarketsFragment();
marketsHome.setArguments(args);
return marketsHome;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
rootView = inflater.inflate(R.layout.fragment_markets,container,false);
DBHelper db = new DBHelper(getActivity().getApplicationContext());
final String c_androidid = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.ANDROID_ID);
final Cursor rs = db.getID(c_androidid);
rs.moveToFirst();
final String c_login = rs.getString(rs.getColumnIndex(DBHelper.c_login));
AsyncTaskRunner taskRunner = new AsyncTaskRunner();
taskRunner.execute(c_login);
return rootView;
}
private class AsyncTaskRunner extends AsyncTask<String,Integer,String>
{
private ProgressDialog progressDialog;
String requestString="";
String c_login;
@Override
protected void onPreExecute()
{
super.onPreExecute();
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("Updating Data...");
progressDialog.setIndeterminate(false);
progressDialog.setCancelable(true);
progressDialog.show();
}
@Override
protected String doInBackground(String... params)
{
c_login=params[0];
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response)
{
JSONArray jArray = null;
try
{
jArray = new JSONArray(response);
requestString=response;
Log.d("MyDebug",response.toString());
}
catch (JSONException e)
{
Log.d("MyDebug","AsyncTask onResponse Error: "+e.toString());
}
}
}, new Response.ErrorListener()
{
public void onErrorResponse(VolleyError error)
{
Log.d("MyDebug","Volley Error: "+error.toString());
}
}){
@Override
protected Map<String,String>getParams()
{
Map<String,String>params=new HashMap<String,String>();
params.put("c_login",c_login);
return params;
}
};
RequestQueue queue = Volley.newRequestQueue(getActivity().getApplicationContext());
queue.add(stringRequest);
return requestString;
}
@Override
protected void onPostExecute(String result)
{
try
{
JSONArray jsonArray = new JSONArray(result);
MarketsAdapter marketsAdapter = new MarketsAdapter(getActivity(),jsonArray);
lvMarkets = (ListView)rootView.findViewById(R.id.lvMarkets);
lvMarkets.setAdapter(marketsAdapter);
progressDialog.dismiss();
}
catch (JSONException e)
{
Log.d("MyDebug","Error on JSON Array "+e.toString());
progressDialog.setMessage("Error Updating Data. "+e.toString());
progressDialog.dismiss();
}
}
}
公共类MarketsFragment扩展了片段{
私有静态最终字符串url=”http://192.168.1.195/test/test.php";
私有静态最终字符串开始_TEXT=“”;
私有静态字符串login=null;
私有静态字符串debug=“MyDebug”;
私有视图rootView;
私人市场;
公共静态市场片段newInstance(字符串文本)
{
Bundle args=新Bundle();
args.putString(起始文本,文本);
MarketsFragment marketsHome=新市场片段();
marketsHome.setArguments(args);
回到我身边;
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
rootView=充气机。充气(右布局。碎片市场,容器,假);
DBHelper db=newdbhelper(getActivity().getApplicationContext());
最后一个字符串c_ANDROID=Settings.Secure.getString(getActivity().getContentResolver(),Settings.Secure.ANDROID);
最终光标rs=db.getID(c_android);
rs.moveToFirst();
最终字符串c_login=rs.getString(rs.getColumnIndex(DBHelper.c_login));
AsyncTaskRunner taskRunner=新建AsyncTaskRunner();
taskRunner.execute(c_登录);
返回rootView;
}
私有类AsyncTaskRunner扩展了AsyncTask
{
私有进程对话;
字符串requestString=“”;
字符串c_登录;
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
progressDialog=新建progressDialog(getActivity());
progressDialog.setMessage(“更新数据…”);
progressDialog.setUndeterminate(false);
progressDialog.setCancelable(真);
progressDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数)
{
c_login=params[0];
StringRequest StringRequest=new StringRequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应)
{
JSONArray-jArray=null;
尝试
{
jArray=新的JSONArray(响应);
requestString=响应;
Log.d(“MyDebug”,response.toString());
}
捕获(JSONException e)
{
Log.d(“MyDebug”,“AsyncTask onResponse错误:+e.toString());
}
}
},new Response.ErrorListener()
{
公共无效onErrorResponse(截击错误)
{
Log.d(“MyDebug”,“截击错误:+Error.toString());
}
}){
@凌驾
受保护的MapgetParams()
{
Mapparams=新的HashMap();
参数put(“c_登录”,c_登录);
返回参数;
}
};
RequestQueue=Volley.newRequestQueue(getActivity().getApplicationContext());
添加(stringRequest);
返回请求字符串;
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
尝试
{
JSONArray JSONArray=新JSONArray(结果);
MarketsAdapter MarketsAdapter=新的MarketsAdapter(getActivity(),jsonArray);
lvMarkets=(ListView)rootView.findviewbyd(R.id.lvMarkets);
lvMarkets.setAdapter(marketsAdapter);
progressDialog.disclose();
}
捕获(JSONException e)
{
Log.d(“MyDebug”,“JSON数组错误”+e.toString());
progressDialog.setMessage(“更新数据时出错。”+e.toString());
progressDialog.disclose();
}
}
}
}
我希望你能帮我做这个
谢谢…首先
“字符0处输入结束”。正因为如此,您得到了生成该异常的空响应
如果问题是您得到的是一个空白响应,那么您应该确保在尝试解析它之前从服务器得到一个响应(这是onPost()中的“result”)
如果问题是错误的JSON,您应该尝试验证它。一个很好的检查
秒
如果错误:com.android.volley.TimeoutError,
您应该设置请求的RetryPolicy
看这里
protected String doInBackground(String... params)
{
..................
..............
int socketTimeout = 30000;//30 seconds - change to what you want
RequestQueue queue = Volley.newRequestQueue(getActivity().getApplicationContext());
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(policy);
queue.add(stringRequest);
return requestString;
}
第三
当您使用截击时,没有必要将其与AsyncTask结合使用。它可以在另一个线程上为您进行网络连接
谢谢..首先
“字符0处输入结束”。正因为如此,您得到了生成该异常的空响应
如果问题是您得到的是一个空白响应,那么您应该确保在尝试解析它之前从服务器得到一个响应(这是onPost()中的“result”)
如果问题是错误的JSON,您应该尝试验证它。一个很好的检查
秒
如果错误:com.android.volley.TimeoutError,
您应该设置请求的RetryPolicy
看这里
protected String doInBackground(String... params)
{
..................
..............
int socketTimeout = 30000;//30 seconds - change to what you want
RequestQueue queue = Volley.newRequestQueue(getActivity().getApplicationContext());
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(policy);
queue.add(stringRequest);
return requestString;
}
第三
当您使用截击时,没有必要将其与AsyncTask结合使用。它可以在另一个线程上为您进行网络连接
谢谢..现在解决了吗?还没有。。我已经检查了服务器端,但没有问题。它生成了JSON数据。。[{“tvSym”:“日元”,“tvSym”:“101.9350”,“TVSDATE”:“6\/27\/2016 8:25am”,“TVSBID”:“102.1050”,“TVSASK”:“102.1200”},{“tvSym”:“英镑”,“TVSCONV”:“0.7466”,“tvDate”:“6\/27\/2016 8:11am”,“tvBid”:“0.7466”,“tvAsk”:“0.7461”},{“tvSym”:“PHP”,“tvConv”:“47.0355”,“tv”日期:“2016年6月27日上午9:37”,“tvBid:”47.0295”,“tvAsk:”47.13