android JSON的解析器

我从android Http中获取一个长字符串,如下:

{"movies":[
{"movieId":"fmen71229238","eTitle":"Mission: Impossible - Ghost Protocol","cTitle":"不可能的任務:鬼影行動","imageUrl":"http://test.mobibon.com.tw/MovieGoTest/Pics/pl_fmen7122923814_s.jpg","releaseDate":"2011/12/15","saleType":"0"},
{"movieId":"fstw79905171","eTitle":"Seediq Bale","cTitle":"賽德克.巴萊(上)太陽旗","imageUrl":"http://test.mobibon.com.tw/MovieGoTest/Pics/pl_fstw7990517114_s.jpg","releaseDate":"2011/9/9","saleType":"0"},
{"movieId":"fytw91390391","eTitle":"You Are the Apple of My Eye","cTitle":"那些年,我們一起追的女孩","imageUrl":"http://test.mobibon.com.tw/MovieGoTest/Pics/pl_fytw9139039102_s.jpg","releaseDate":"2011/8/19","saleType":"0"}
]}

字符串是JSON格式,我想让它在不同的数组中排列,再在一个Listview中显示。所以我使用JSON paser:

JSONArray result = new JSONArray(retSrc);
        for(int i = 0;i < result.length(); i++)
        {
        JSONObject stock_data = result.getJSONObject(i);
        Log.i("bird","eTitle:"+stock_data.getString("eTitle"));
        }
        } finally {
        }
        }

retSrc 是网站的长字符串
但是Log是:

Log.i("bird","eTitle:"+stock_data.getString("eTitle"));

没有输出任何东西.

我希望log是这样的:

Mission: Impossible - Ghost Protocol Seediq Bale.....

2个回答

JSONObject jObj=new JSONObject(retSrc);
JSONArray jArr=jObj.getJSONArray("movies");
for(int i = 0;i < result.length(); i++)
{
   JSONObject stock_data = result.getJSONObject(i);

}

你先这样做了吗?:

    JSONObject retSrc= 你获得的json的str.getJSONObject("movies");
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JSON解析器错误java.lang.String无法转换为JSONObject] Array

<div class="post-text" itemprop="text"> <p>Hi guys so my problem is ive developed an app for android that uses json parser to get data from my php webservice and display it into a listview, but when i run the app it shows this:</p> <p>LogCat:</p> <pre><code>E/JSON Parser(1999): Error parsing data [Value Array of type java.lang.String cannot be converted to JSONObject] Array 04-02 13:46:46.982: E/JSON Parser(1079): ( 04-02 13:46:46.982: E/JSON Parser(1079): [id] =&gt; 1 04-02 13:46:46.982: E/JSON Parser(1079): [dt_ini_camp] =&gt; 2012-12-22 04-02 13:46:46.982: E/JSON Parser(1079): [dt_fim_camp] =&gt; 2012-12-24 04-02 13:46:46.982: E/JSON Parser(1079): [descricao] =&gt; Apoios comunit?rios 04-02 13:46:46.982: E/JSON Parser(1079): [qtd] =&gt; 4762.000 04-02 13:46:46.982: E/JSON Parser(1079): ) 04-02 13:46:46.982: E/JSON Parser(1079): Array 04-02 13:46:46.982: E/JSON Parser(1079): ( 04-02 13:46:46.982: E/JSON Parser(1079): [id] =&gt; 2 04-02 13:46:46.982: E/JSON Parser(1079): [dt_ini_camp] =&gt; 2012-10-08 04-02 13:46:46.982: E/JSON Parser(1079): [dt_fim_camp] =&gt; 2012-10-10 04-02 13:46:46.982: E/JSON Parser(1079): [descricao] =&gt; Outras Campanhas 04-02 13:46:46.982: E/JSON Parser(1079): [qtd] =&gt; 3560.000 04-02 13:46:46.982: E/JSON Parser(1079): ) </code></pre> <p>My code:</p> <p>Activity with list view and invokes json parser:</p> <pre><code>public class AllProductsActivity extends ListActivity { // Progress Dialog private ProgressDialog pDialog; // Creating JSON Parser object JSONParser jParser = new JSONParser(); ArrayList&lt;HashMap&lt;String, String&gt;&gt; productsList; // url to get all products list private static String url_all_products = "http://10.0.2.2/webprojecto4/index_pesagem.php"; // JSON Node names private static final String TAG_SUCCESS = "success"; private static final String TAG_PRODUCTS = "cab_doc"; private static final String TAG_ID = "id"; private static final String TAG_NAME = "descricao"; private static final String TAG_DATA = "dt_ini_camp"; private static final String TAG_DATA2 = "dt_fim_camp"; private static final String TAG_QTD = "qtd"; // products JSONArray JSONArray products = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.all_products); // Hashmap for ListView productsList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;(); // Loading products in Background Thread new LoadAllProducts().execute(); // Get listview ListView lv = getListView(); // on seleting single product // launching Edit Product Screen // on seleting single product // launching Edit Product Screen lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) { // getting values from selected ListItem String id2 = ((TextView) view.findViewById(R.id.id)).getText() .toString(); // Starting new intent Intent in = new Intent(getApplicationContext(), EditProductActivity.class); // sending pid to next activity in.putExtra(TAG_ID, id); // starting new activity and expecting some response back startActivityForResult(in, 100); } }); } // Response from Edit Product Activity @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // if result code 100 if (resultCode == 100) { // if result code 100 is received // means user edited/deleted product // reload this screen again Intent intent = getIntent(); finish(); startActivity(intent); } } /** * Background Async Task to Load all product by making HTTP Request * */ class LoadAllProducts extends AsyncTask&lt;String, String, String&gt; { /** * Before starting background thread Show Progress Dialog * */ @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(AllProductsActivity.this); pDialog.setMessage("Loading products. Please wait..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } /** * getting All products from url * */ protected String doInBackground(String... args) { // Building Parameters List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;(); // getting JSON string from URL JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params); // Check your log cat for JSON reponse Log.d("All Products: ", json.toString()); try { // Checking for SUCCESS TAG int success = json.getInt(TAG_SUCCESS); if (success == 1) { // products found // Getting Array of Products products = json.getJSONArray(TAG_PRODUCTS); // looping through All Products for (int i = 0; i &lt; products.length(); i++) { JSONObject c = products.getJSONObject(i); // Storing each json item in variable String id = c.getString(TAG_ID); String name = c.getString(TAG_NAME); String data = c.getString(TAG_DATA); String data2 = c.getString(TAG_DATA2); String qtd = c.getString(TAG_QTD); // creating new HashMap HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;(); // adding each child node to HashMap key =&gt; value map.put(TAG_ID, id); map.put(TAG_NAME, name); map.put(TAG_DATA, data); map.put(TAG_DATA2, data2); map.put(TAG_QTD, qtd); // adding HashList to ArrayList productsList.add(map); } } else { // no products found // Launch Add New product Activity Intent i = new Intent(getApplicationContext(), NewProductActivity.class); // Closing all previous activities i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } } catch (JSONException e) { e.printStackTrace(); } return null; } /** * After completing background task Dismiss the progress dialog * **/ protected void onPostExecute(String file_url) { // dismiss the dialog after getting all products pDialog.dismiss(); // updating UI from Background Thread runOnUiThread(new Runnable() { public void run() { /** * Updating parsed JSON data into ListView * */ ListAdapter adapter = new SimpleAdapter( AllProductsActivity.this, productsList, R.layout.list_item, new String[] { TAG_ID, TAG_NAME, TAG_DATA, TAG_DATA2, TAG_QTD}, new int[] { R.id.id, R.id.descricao, R.id.data, R.id.data2, R.id.qtd }); // updating listview setListAdapter(adapter); } }); } } } </code></pre> <p>Json Parser in this i only changed this line BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8); instead of utf-8 it was iso-8859-1 ive searched for this error and based on answers i found it said it would be better utf-8 but it didnt fixed the problem</p> <pre><code>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 mehtod public JSONObject makeHttpRequest(String url, String method, List&lt;NameValuePair&gt; 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, "utf-8"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + " "); } 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.getMessage()+"] "+json); } // return JSON String return jObj; } } </code></pre> <p>And my php service:</p> <pre><code>&lt;?php /* * Following code will list all the products */ // array for JSON response $response = array(); // include db connect class require_once __DIR__ . '/conectaDB.php'; // connecting to db $db = new DB_CONNECT(); // get all products from products table $result = mysql_query("select cd.id, cd.dt_ini_camp, cd.dt_fim_camp, cd.descricao, + (select sum(quantidade) from lin_doc where id_cab_doc = cd.id) as qtd from cab_doc cd where cd.id_tipo_doc = 1") or die(mysql_error()); // check for empty result if (mysql_num_rows($result) &gt; 0) { // looping through all results // products node $response["cab_doc"] = array(); while ($row = mysql_fetch_array($result)) { // temp user array $product = array(); $product["id"] = $row["id"]; $product["dt_ini_camp"] = $row["dt_ini_camp"]; $product["dt_fim_camp"] = $row["dt_fim_camp"]; $product["descricao"] = $row["descricao"]; $product["qtd"] = $row["qtd"]; // push single product into final response array array_push($response["cab_doc"], $product); print_r($product); } // success $response["success"] = 1; // echoing JSON response echo json_encode($response); } else { // no products found $response["success"] = 0; $response["message"] = "No products found"; // echo no users JSON echo json_encode($response); } ?&gt; </code></pre> <p>Please guys i really need help i dont find the problem, the problem i find lol i dont find the answer to my problem xD</p> </div>

使用JSON解析器时错误的错误代码

<div class="post-text" itemprop="text"> <p>I'm having trouble finding the error in my .php script.</p> <p>I use an android app sending post requests in order to register a user including a unique device id and email.</p> <p>When sending the data my api checks if the email or device id already exist so you can't register twice.</p> <p>When registering the first time, everything works. When i try to register again with the same email it works aswell (getting the correct error). But if I use a different email (but the same device id) I get a wrong error code.</p> <p>Here is the PHP-Code:</p> <pre><code>else if ($tag == 'register') { // Request type is Register new user $name = $_POST['name']; $email = $_POST['email']; $password = $_POST['password']; $devid = $_POST['devid']; // check if user already exists if ($db-&gt;CheckUser($email)) { // user already exists $response["error"] = 2; $response["error_msg"] = "User already exists"; echo json_encode($response);} else if ($db-&gt;CheckDevice($devid)) { // Device already exists $response["error"] = 3; $response["error_msg"] = "Device already exists"; echo json_encode($response);} else { // store user $user = $db-&gt;storeUser($name, $email, $password, $devid); if ($user) { // user stored successfully $response["success"] = 1; $response["uid"] = $user["unique_id"]; $response["user"]["name"] = $user["name"]; $response["user"]["email"] = $user["email"]; $response["user"]["devid"] = $user["devid"]; $response["user"]["created_at"] = $user["created_at"]; $response["user"]["updated_at"] = $user["updated_at"]; echo json_encode($response);} else { // user failed to store $response["error"] = 1; $response["error_msg"] = "Error occured in Registration"; echo json_encode($response);} } } </code></pre> <p>Check Functions:</p> <pre><code>public function CheckUser($email) { $result = mysql_query("SELECT email from users WHERE email = '$email'"); $no_of_rows = mysql_num_rows($result); if ($no_of_rows &gt; 0) { // user existed return true;} else { // user not existed return false;} } public function CheckDevice($devid) { $result = mysql_query("SELECT devid from users WHERE devid = '$devid'"); $no_of_rows = mysql_num_rows($result); if ($no_of_rows &gt; 0) { // user existed return true; } else { // user not existed return false; } } </code></pre> <p>Store Function:</p> <pre><code>public function storeUser($name, $email, $password, $devid) { $uuid = uniqid('', true); $hash = $this-&gt;hashSSHA($password); $encrypted_password = $hash["encrypted"]; // encrypted password $salt = $hash["salt"]; // salt $result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, devid, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', '$devid', NOW())"); // check for successful store if ($result) { // get user details $uid = mysql_insert_id(); // last inserted id $result = mysql_query("SELECT * FROM users WHERE uid = $uid"); // return user details return mysql_fetch_array($result); } else { return false; } } </code></pre> <p>I'm sending </p> <p>I should get this error:</p> <pre><code>$response["error"] = 3; $response["error_msg"] = "Device already exists"; </code></pre> <p>But i am getting this one:</p> <pre><code>$response["error"] = 1; $response["error_msg"] = "Error occured in Registration"; </code></pre> <p>Somehow when calling the <code>CheckDevice</code> Function it seems to return <code>false</code> although when I manually use <code>SELECT devid from users WHERE devid = '$devid'</code> in phpMyAdmin I get a <code>true</code>.</p> <p>Then he fails to store because the device id must be unique and gives me the error (thats the only plausible explanation).</p> </div>

生成富文本编辑器生成内容转换成json格式,解析出错,在mysql里面用什么类型保存

富文本怎么保存?保存在mysql里面用什么样的类型,还有就是能够获取到富文本的内容(包括标签什么的),用json怎么转换,用过转义也不行?求助啊!!!!

获取错误:解析数据时出错org.json.JSONException:org.json.JSONArray类型的值无法转换为JSONObject

<div class="post-text" itemprop="text"> <p>Stuck and need help. JSON parser cannot convert data so I can use the username and password to login.</p> <pre><code>jsonParser = new JSONParser(); public JSONObject loginUser(String username, String password) { // Building Parameters List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;(); params.add(new BasicNameValuePair("tag", login_tag)); params.add(new BasicNameValuePair("username", username)); params.add(new BasicNameValuePair("password", password)); JSONObject json = jsonParser.getJSONFromUrl(loginURL, params); return json; } </code></pre> <p>PHP part of the code:</p> <pre><code>while($r = mysql_fetch_assoc($result)) { $json[] = $r; } print json_encode($json); </code></pre> </div>

关于百度地图API 逆地址解析的问题

![图片说明](https://img-ask.csdn.net/upload/201707/07/1499417805_418604.png) 当我每次点击签到的时候,地址通过JS解析出来并存在下表中。但是在手机端就用不了 ``` <script type="text/javascript"> // 百度地图API功能 var map = new BMap.Map("allmap"); var point = new BMap.Point(116.331398,39.897445); map.centerAndZoom(point,12); var geoc = new BMap.Geocoder(); map.addEventListener("click", function(e){ var pt = e.point; geoc.getLocation(pt, function(rs){ var addComp = rs.addressComponents; alert(addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber); }); }); var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(r){ if(this.getStatus() == BMAP_STATUS_SUCCESS){ var mk = new BMap.Marker(r.point); map.addOverlay(mk); map.panTo(r.point); $("#lng").val(r.point.lng) $("#lat").val(r.point.lat) }else { alert('failed'+this.getStatus()); } },{enableHighAccuracy: true}) }); </script> <script type="text/javascript"> $(document).ready(function(){ var lng = $("#lng").val(); var lat = $("#lat").val(); //动态加载script文件 var head= document.getElementsByTagName('head')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= 'http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location='+lat+','+lng+'&output=json&pois=1&ak=秘钥; head.appendChild(script); }); //逆地址解析 function renderReverse (data) { var json_str=JSON.stringify(data); var obj = JSON.parse(json_str); var obj2=JSON.stringify(obj.result); var obj3=JSON.parse(obj2); document.getElementById('coord').value=obj3.formatted_address; //alert(obj3.formatted_address) } </script> ``` 是兼容性的问题吗? 还有就是在火狐浏览器可以,别的浏览器也定位不到 哪儿大哥帮小弟解决一下小弟QQ:745419653

想把别人做好的解析视频的网站加载到app上,用腾讯X5webview,可是却不能加载视频,有时候控制

新手没有币种,如果有的话我一定会多给的,大家帮帮忙谢谢 大神帮忙看一下,想把别人做好的解析视频的wangzhan加载到app上,用腾讯X5webview,可是却不能加载视频,有时候控制台会报:请不要解析 代码如下(为什么单纯用游览器就能播放视频,而放到app上就不能使用了) MainActivity.java(更新版本代码和腾讯X5代码我就不放了) public class MainActivity extends AppCompatActivity { private com.tencent.smtt.sdk.WebView webView; private String url = "http://v.woaik.com/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = new com.tencent.smtt.sdk.WebView(this); int width = webView.getView().getWidth(); //腾讯X5 initX5(); getWindow().setFormat(PixelFormat.TRANSLUCENT);//(这个对宿主没什么影响,建议声明) getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); initView(); loadUrl(url);//访问网页 update();//安卓版本更新 } private void initView() { webView = (com.tencent.smtt.sdk.WebView) findViewById(R.id.forum_context); } private void initX5() { Intent intent = new Intent(this, AdvanceLoadX5Service.class); startService(intent); } private void update() { Map<String, String> params = new HashMap<String, String>(); params.put("key1", "value1"); params.put("key2", "value2"); params.put("key3", "value3"); params.put("key4", "value4"); new UpdateAppManager .Builder() //当前Activity .setActivity(this) //实现httpManager接口的对象 .setHttpManager(new UpdateAppHttpUtil()) //设置请求方式 默认get, .setPost(false) //更新地址 .setUpdateUrl("http://122.14.199.210/json.txt") //添加自定义参数 .setParams(params) //设置点击升级后,消失对话框 .hideDialogOnDownloading(true) //设置头部 .setTopPic(R.mipmap.top_8) //设置主题色 // .setThemeColor(0xff034ea0) .build() //检测是否有新版本 .checkNewApp(new UpdateCallback() { /** * 解析json,自定义协议 * * @param json 服务器返回的json * @return UpdateAppBean */ @Override protected UpdateAppBean parseJson(String json) { UpdateAppBean updateAppBean = new UpdateAppBean(); try { JSONObject jsonObject = new JSONObject(json); updateAppBean //是否更新Yes,No .setUpdate(jsonObject.optString("update")) //新版本号 .setNewVersion(jsonObject.optString("new_version")) //下载地址 .setApkFileUrl(jsonObject.optString("apk_file_url")) //大小 .setTargetSize(jsonObject.optString("target_size")) //更新内容 测试更新内容过多 .setUpdateLog("1,添加删除信用卡接口\n2,添加vip认证\n3,区分自定义消费,一个小时不限制。\n4,添加放弃任务接口,小时内不生成。\n5,消费任务手动生成。" + "\n1,添加删除信用卡接口\n2,添加vip认证\n3,区分自定义消费,一个小时不限制。\n4,添加放弃任务接口,小时内不生成。\n5,消费任务手动生成。" + "\n1,添加删除信用卡接口\n2,添加vip认证\n3,区分自定义消费,一个小时不限制。\n4,添加放弃任务接口,小时内不生成。\n5,消费任务手动生成。" + "\n1,添加删除信用卡接口\n2,添加vip认证\n3,区分自定义消费,一个小时不限制。\n4,添加放弃任务接口,小时内不生成。\n5,消费任务手动生成。" + "\n1,添加删除信用卡接口\n2,添加vip认证\n3,区分自定义消费,一个小时不限制。\n4,添加放弃任务接口,小时内不生成。\n5,消费任务手动生成。" + "\n1,添加删除信用卡接口\n2,添加vip认证\n3,区分自定义消费,一个小时不限制。\n4,添加放弃任务接口,小时内不生成。\n5,消费任务手动生成。") //是否强制更新 .setConstraint(false); //设置md5 // .setNewMd5(jsonObject.optString("new_md5ddfdfdf")); } catch (JSONException e) { e.printStackTrace(); } return updateAppBean; } /** * 有新版本 * * @param updateApp 新版本信息 * @param updateAppManager app更新管理器 */ @Override public void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) { if (updateApp.isConstraint()) { } else { } updateAppManager.showDialog(); } /** * 网络请求之前 */ @Override public void onBefore() { CProgressDialogUtils.showProgressDialog(MainActivity.this); } /** * 网路请求之后 */ @Override public void onAfter() { CProgressDialogUtils.cancelProgressDialog(MainActivity.this); } /** * 没有新版本 */ @Override public void noNewApp() { Toast.makeText(MainActivity.this, "没有新版本", Toast.LENGTH_SHORT).show(); } }); } @Override protected void onStart() { super.onStart(); } private void loadUrl(String url) { WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.loadUrl(url); webView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } public void onReceivedError(WebView var1, int var2, String var3, String var4) { Log.i("打印日志","网页加载失败"); } }); //进度条 webView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { Log.i("打印日志","加载完成"); } } }); } @Override protected void onDestroy() { super.onDestroy(); if (webView != null) webView.destroy(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webView != null && webView.canGoBack()) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); } return super.onKeyDown(keyCode, event); } }

关于安卓内存泄露的问题

小弟最近在做一个小项目,基本上功能完成了,但发现在程序运行了几分钟后会自动退出,打印的日志信息如下: ![图片说明](https://img-ask.csdn.net/upload/201907/22/1563795606_231565.png) 然后又通过对程序进行注释后发现在将从服务器获取数据的功能注释掉后这个问题解决了,所以觉得问题应该是出在这一块,在这个功能中循环调用的函数有关于对象以及线程,不知是否是这一块的问题,现将整个程序贴上求大神帮忙看看: MainActivity中: ``` package com.example.gsontest; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.MyLocationConfiguration; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.utils.CoordinateConverter; import org.json.JSONObject; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class MainActivity extends AppCompatActivity { private MapView mapView; private BaiduMap baiduMap; public LocationClient mLocationClient; public static String responseData; public double dvalueX; public double dvalueY; private boolean isFirstLocate = true; public int mXDirection; //方向类的对象 public MyOrientationListener myOrientationListener; @Override //该函数主要是进行Activity初始化 protected void onCreate(Bundle savedInstanceState) { Log.i("MainActivity","进入到onCreate函数中进行初始化"); super.onCreate(savedInstanceState); //实例化对象 mLocationClient = new LocationClient(getApplicationContext()); //注册监听器 mLocationClient.registerLocationListener(new MyLocationListener()); //初始化SDK SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.bmpView); baiduMap = mapView.getMap(); baiduMap.setMyLocationEnabled(true); //尝试在监听按钮之前进行权限的允许 List<String> permissionList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!permissionList.isEmpty()) { String[] permission = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(MainActivity.this, permission, 1); requestLocation(); } else { requestLocation(); } } private void requestLocation() { Log.i("MainActivity", "进入到requestLocation函数中"); initLocation(); //定位开始 initOrientationListener(); myOrientationListener.start(); mLocationClient.start(); } private void initLocation() { Log.i("MainActivity", "跳进了initLocation定位初始化函数中"); LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); option.setScanSpan(1000); mLocationClient.setLocOption(option); } private void initOrientationListener() { Log.i("MainActivity", "跳进了initOrientationListener方向初始化函数中"); myOrientationListener = new MyOrientationListener(getApplicationContext()); myOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() { @Override public void onOrientationChanged(float x) { mXDirection = (int) x; } }); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { Log.i("MainActivityActivity","进入onRequestPermissionResult函数中"); switch (requestCode) { case 1: if (grantResults.length > 0) { for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "必须同意所有权限", Toast.LENGTH_LONG).show(); finish(); return; } } // sendRequestWithOkHttp(); } else { Toast.makeText(this, "发生未知错误", Toast.LENGTH_LONG).show(); finish(); } break; default: } } //定位监听器的类 public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { Log.i("MainActivity", "跳进了onReceiveLocation函数中"); if (location.getLocType() == BDLocation.TypeGpsLocation || location.getLocType() == BDLocation.TypeNetWorkLocation) { navigateTo(location); } } } private void navigateTo(BDLocation location) { Log.i("MainActivity", "跳进了navigateTo函数中"); //从服务器上获取实时的硬件位置 sendRequestWithOkHttp(); //将获取到的数据进行解析 ObjectJson(responseData); //将获取到的经纬度信息在地图上进行显示 displayLocation(dvalueX, dvalueY); //初次定位确定缩放尺寸,后面不改变便于手动伸缩 if (isFirstLocate) { BitmapDescriptor myBitMap = BitmapDescriptorFactory.fromResource(R.drawable.icon_reddirection); MyLocationConfiguration myLocationConfiguration = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true, myBitMap); baiduMap.setMyLocationConfiguration(myLocationConfiguration); LatLng la = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(la); baiduMap.animateMapStatus(update); update = MapStatusUpdateFactory.zoomTo(18f); baiduMap.animateMapStatus(update); isFirstLocate = false; } //将手机当前位置的小蓝点显示在屏幕上 MyLocationData.Builder locationBuilder = new MyLocationData.Builder(); locationBuilder.latitude(location.getLatitude()); locationBuilder.longitude(location.getLongitude()); //将要执行获取方向方法 locationBuilder.direction(mXDirection); MyLocationData locationData = locationBuilder.build(); baiduMap.setMyLocationData(locationData); } //重写三个方法以对mapView进行管理,保证资源可以及时释放 @Override protected void onResume() { Log.i("MainActivity", "进入到onResume函数中"); super.onResume(); mapView.onResume(); } @Override protected void onPause() { Log.i("MainActivity", "进入到onPause函数中"); super.onPause(); mapView.onPause(); } @Override protected void onDestroy() { Log.i("MainActivity", "进入到onDestroy函数中"); super.onDestroy(); mapView.onDestroy(); baiduMap.setMyLocationEnabled(false); mLocationClient.stop(); //停止方向监听 myOrientationListener.stop(); } private void sendRequestWithOkHttp() { Log.i("MainActivity", "跳进了sendRequestWithOkHttp方法中"); new Thread(new Runnable() { @Override //重写run方法,run方法规定了该线程的具体使命 public void run() { Log.i("MainActivity","跳进OkHttp的子线程中"); try { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://huadiheal.cn/animal/latest_data") .build(); Response response = client.newCall(request).execute(); responseData = response.body().string(); // ObjectJson(responseData); } catch (Exception e) { e.printStackTrace(); } } //创建后线程仅是占有内存资源,在JVM管理的线程中还没有这个资源,要调用父类的start方法通知JVM }).start(); } private void ObjectJson(String responseData) { Log.i("MainActivity", "跳进了ObjectJson函数中"); try { JSONObject jsonObject = new JSONObject(responseData); JSONObject valueX = jsonObject.getJSONObject("value_x"); JSONObject valueY = jsonObject.getJSONObject("value_y"); Iterator<String> iteratorX = valueX.keys(); while (iteratorX.hasNext()) { String valueXkey = iteratorX.next(); String valueXValue = valueX.getString(valueXkey); String valueYValue = valueY.getString(valueXkey); dvalueX = Double.parseDouble(valueXValue); dvalueY = Double.parseDouble(valueYValue); } } catch (Exception e) { e.printStackTrace(); } } public void displayLocation(double dvalueX, double dvalueY) { Log.i("MainActivity", "进入displayLocation中"); LatLng latLng = new LatLng(dvalueY, dvalueX); //进行坐标转换 CoordinateConverter converter = new CoordinateConverter() .from(CoordinateConverter.CoordType.GPS) .coord(latLng); LatLng dLatlng = converter.convert(); //进行刷新时,先清除上一次的overlay baiduMap.clear(); //现添加Marker将位置在地图上标出来 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_niu32); OverlayOptions option = new MarkerOptions() .position(dLatlng) .icon(bitmap); baiduMap.addOverlay(option); } } ``` 方向传感器的监听类如下: ``` package com.example.gsontest; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.Log; //方向监听器的类 public class MyOrientationListener implements SensorEventListener { private SensorManager mySensorManager; private Sensor mySensor; private Context myContext; private float lastX; private OnOrientationListener myOnOrientationListener; public void start(){ Log.i("MainActivity", "跳进了方向类的start函数中"); mySensorManager = (SensorManager) myContext.getSystemService(Context.SENSOR_SERVICE); if(mySensorManager!=null){ mySensor = mySensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } if(mySensor!=null){ //SENSOR_UI可能会出现数据滞后现象,若后期数据滞后则改成别的类型 mySensorManager.registerListener(this,mySensor,SensorManager.SENSOR_DELAY_NORMAL); } } //接触注册方向传感器监听事件,即对onDestroy中所引方法的实现 public void stop(){ Log.i("MainActivity","跳进方向类的stop函数中"); mySensorManager.unregisterListener(this); } //方向传感器的一个构造函数 public MyOrientationListener(Context myContext){ this.myContext = myContext; } @Override public void onAccuracyChanged(Sensor sensor,int accuracy){} //监听方向变化 @Override public void onSensorChanged(SensorEvent event){ Log.i("MainActivity","跳进了onSensorChanged函数中"); if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){ float x = event.values[SensorManager.DATA_X]; if (Math.abs(x-lastX)>1.0){ if(myOnOrientationListener!=null){ myOnOrientationListener.onOrientationChanged(lastX); } } lastX = x; } } public void setOnOrientationListener(OnOrientationListener myOrientationListener){ this.myOnOrientationListener = myOrientationListener; } public interface OnOrientationListener{ void onOrientationChanged(float x); } } ``` 恳请大神帮忙看下程序谢谢!!

关于Spring中事务的先关问题~~~苦等各位高手大拿~~~这里先谢谢啦~~有代码哦!

``` @Override @Transactional public JSONObject openToAccount(JSONObject params)throws Exception { JSONObject json = new JSONObject(); // 先判断是否存在用户账户记录 if(userAccountDao.isExistUserAmountRec(params.getString("userId")) <= 0){ // 不存在 // 初始化用户账户记录 int initcount = userAccountDao.initUserAccount(params.getString("userId")); if(initcount <= 0){ throw new BusinessException("初始化用户账户记录异常"); } }else{ //存在 // 获取用户账号对象 UserAccounct userAccounct = userAccountDao.getUserAmountByUserId(params.getString("userId")); // 是否存在 if(userAccounct != null){ logger.info(" userAccount Record is Exist ! "); // 个人收益是否大于0 if(userAccounct.getPlatformRevenue().compareTo(BigDecimal.ZERO) == 1){ try { logger.info(" userAccount record incomeAmount is ¥ " + userAccounct.getPlatformRevenue()); // 先修改本地记录 将用户收益归零 int updateUserAccountCount = userAccountDao.setPlatformRevenueByUserId(params.getString("userId"), BigDecimal.ZERO); if(updateUserAccountCount <= 0){ throw new BusinessException("重置该用户收益金额异常"); } logger.info(" userAccount record incomeAmount updated to Zero "); // 将所有属于该用户的订单更新为已折现 int updatePaymentCount = paymentDao.updateIsDiscountedByUserId(params.getString("userId")); if(updatePaymentCount <= 0){ throw new BusinessException("用户订单信息折现状态更新异常"); } logger.info(" payment record isdiscounted updated to 'true' "); // 封装数据 请求openToAccount接口 List<NameValuePair> paramsList = new ArrayList<NameValuePair>(); // 根据终端匹配AppId if(params.getString("terminal") == "ios" || "ios".equals(params.getString("terminal"))){ // iosAppId paramsList.add(new BasicNameValuePair("client_id", iosAppId)); } if(params.getString("terminal") == "android" || "android".equals(params.getString("terminal"))){// andoriApp paramsList.add(new BasicNameValuePair("client_id", androidAppId)); } logger.info(" access_token is "+ params.getString("access_token")); logger.info(" openid "+ params.getString("openId")); logger.info(" amount "+ userAccounct.getPlatformRevenue().toString()); paramsList.add(new BasicNameValuePair("access_token", params.getString("access_token"))); // access_token移动端传递 paramsList.add(new BasicNameValuePair("openid", params.getString("openId"))); // openId移动端传递 paramsList.add(new BasicNameValuePair("amount",userAccounct.getPlatformRevenue().toString())); // 金额 目前为全部折现 String r = HttpsClientUtils.doPost(openToAccountUrl, paramsList); // 调用开放平台openToAccount接口 JSONObject returnJson = JSONObject.parseObject(r); // openToAccount接口返回 JsonObject String code = returnJson.getString("code"); // 返回参数 code String success = returnJson.getString("success"); // 返回参数 success String msg = returnJson.getString("msg"); // 返回参数 msg logger.info(" UTOUU Open platform OpenToAcount return----->code:{}-----msg:{}-----success:{}",code,msg,success); // 根据openToCas接口返回的code码 判断 折现成功 if(code == ConfessionConstants.DISCOUNTED_SUCCESS_CODE || ConfessionConstants.DISCOUNTED_SUCCESS_CODE.equals(code)){ logger.info(" OpenToAcount return code is " + code);// 返回0为成功 // 返回折现成功消息 json = JsonUtils.getSucResultJson(ResultCodeAndMsg.RSP_SUCCESS_CODE, ResultCodeAndMsg.REVENUE_DISCOUNT_SUCCESS_MSG); return json; } // 折现失败 logger.info(" OpenToAcount return code is " + code); json = JsonUtils.getFailResultJson(ResultCodeAndMsg.RSP_FAIL_CODE, ResultCodeAndMsg.RSP_FAIL_MSG); throw new BusinessException("个人收益转出失败!"); } catch (Exception e) { e.printStackTrace(); } }else{ // 返回没有可以折现的收益金额信息 json = JsonUtils.getFailResultJson(ResultCodeAndMsg.RSP_SUCCESS_CODE, ResultCodeAndMsg.REVENUE_IS_ZREO); return json; } }else{ throw new BusinessException("未找到该用户账户记录异常"); } } json = JsonUtils.getFailResultJson(ResultCodeAndMsg.RSP_FAIL_CODE, ResultCodeAndMsg.RSP_FAIL_MSG); return json; } ``` 这个是我的一个业务实现类、大致用途是关于金额转出的、其中在代码中还请求了第三方服务的接口 现在我的问题主要有两个: 1:为什么我根据第三方服务返回的结果判断后(当然是我不想得到的结果时)throw 异常 后该service层调用的所有DAO不回滚? 2:如何防止并发呢?我这里是可以多点登录的、即同一个用户在不同的设备上同时执行了该业务类,这时候我就傻了~~~请问该如何处理? 谢谢大家了

华为平板获取不了服务器返回的401状态码

# 服务器返回http状态码401,华为平板不能解析 使用token的机制,后台使用的是ssm框架,使用springmvc拦截器校验app用户是否已经登录。由于没有找到方法直接在拦截器中返回json数据,只能通过response.setStatus(401)来通知app端需要登录,使用华为手机和别的测试机都没问题,但今天使用华为的平板,则发现获取不了401状态码,报了一个空指针异常,部分错误: _05-10 16:24:04.900: W/x_log:HttpRetryHandler.canRetry(L:64)(30512): The Request Method can not be retried._ 由于安卓的人走了,明天再补齐所有错误! 我服务器的代码是这样的: ``` public class WalletInterceptor extends HandlerInterceptorAdapter { // 不拦截的url private List<String> uncheckUrls; public void setUncheckUrls(List<String> uncheckUrls) { this.uncheckUrls = uncheckUrls; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("进入拦截器"); // 如果为登录,注册,获取验证码的接口,则不拦截 String requestUrl = request.getRequestURI(); if (uncheckUrls.contains(requestUrl)) { System.out.println("跳过拦截器"); return super.preHandle(request, response, handler); } // 获取token和ID String token = request.getParameter("token"); String ID = request.getParameter("ID"); System.out.println("token:" + token + "===" + "ID" + ID); if (token == null || "".equals(token)) { // 不存在则抛出一个401异常给移动端 response.setStatus(401); return false; } // 判断是否存在连接,不存在则要通知前端登录 Jedis jedis = RedisUtils.getJedis(); byte[] by = jedis.get(token.getBytes()); if ((by == null) || (!(new String(by)).equals(walletID))) { // 不存在连接,则抛一个401给移动端 response.setStatus(401); return false; } System.out.println("校验成功"); return super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); } } ``` 第一次发帖,有什么写的不好的地方请指出来,下次发帖再改善一下

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

2020春招面试了10多家大厂,我把问烂了的数据库事务知识点总结了一下

2020年截止目前,我面试了阿里巴巴、腾讯、美团、拼多多、京东、快手等互联网大厂。我发现数据库事务在面试中出现的次数非常多。

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

立即提问
相关内容推荐