Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
Json 异步任务上的字符串请求_Json_Android Asynctask - Fatal编程技术网

Json 异步任务上的字符串请求

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

嗨,我想问一下,这里是否有人知道如何在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";
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