public class UnknownWordActivity extends AppCompatActivity {
ArrayList<String> unknownWordData;
ArrayList<JSONObject> unknownWordJsonData;
ListView unknownListView;
@Override
protected void onPostResume()
{
super.onPostResume();
getDelegate().onPostResume();
unknownWordData=new ArrayList<>();
unknownWordJsonData=new ArrayList<>();
SharedPreferences h=getSharedPreferences("data",MODE_PRIVATE);
try
{
JSONArray jsonArray = new JSONArray(h.getString("unknownWordTag", "[]"));
for (int i = 0; i < jsonArray.length(); i++)
{
JSONObject o=jsonArray.getJSONObject(i);
unknownWordJsonData.add(o);
unknownWordData.add(o.getString("wordName"));
}
wordListAdapter ad=new wordListAdapter(UnknownWordActivity.this, R.layout.historylistlayout,unknownWordData);
unknownListView.setAdapter(ad);
}
catch (JSONException ex)
{
ex.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_unkonw_word);
unknownListView=(ListView)findViewById(R.id.unknownWordListView);
unknownListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
try
{
Word word= new Word();
JSONObject contentJson = unknownWordJsonData.get(position);
int status = contentJson.getInt("status");
word.setStatus(status);
if (status==1)
{
word.setOut(contentJson.getString("out"));
}
else
{
JSONArray wordMeanJsonArray = new JSONArray(contentJson.getString("wordMean"));
List<String> wordMeanList=new ArrayList<>();
for (int i=0;i<wordMeanJsonArray.length();i++)
{
wordMeanList.add(wordMeanJsonArray.getString(i));
}
word.setWordMean(wordMeanList);
word.setPhTtsMp3(contentJson.getString("phTtsMp3"));
}
word.setWordName(unknownWordData.get(position));
Intent intent = new Intent();
intent.setClass(UnknownWordActivity.this, vocabularyActivity.class);
Bundle bundle=new Bundle();
bundle.putSerializable("word",word);
intent.putExtras(bundle);
UnknownWordActivity.this.startActivity(intent);
}
catch (JSONException e)
{
e.printStackTrace();
}
}
});
}
}
-------------------------------------------
public class vocabularyActivity extends AppCompatActivity { static String unknownWordTag="unknownWordTag"; int state; private Word word; private TextView wordTextView; private TextView meanTextView; private Button soundButton; private MediaPlayer mediaPlayer; Button addOrRemoveWordButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_vocabulary); wordTextView=(TextView)findViewById(R.id.wordTextView); meanTextView=(TextView)findViewById(R.id.meanTextView); soundButton=(Button) findViewById(R.id.soundButton); mediaPlayer = new MediaPlayer(); addOrRemoveWordButton=(Button)findViewById(R.id.addOrRemoveWordButton); setUp(); setAddOrRemoveWordButton(); } void setAddOrRemoveWordButton() { SharedPreferences h=getSharedPreferences("data",MODE_PRIVATE); try { JSONArray jsonArray = new JSONArray(h.getString(unknownWordTag, "[]")); for (int i = 0; i < jsonArray.length(); i++) { JSONObject JO=jsonArray.getJSONObject(i); String wordName=JO.getString("wordName"); if (wordName.equals(word.getWordName())) { addOrRemoveWordButton.setText("从生词本中移除"); state=1; } else { addOrRemoveWordButton.setText("加入生词本"); state=0; } } } catch (JSONException ex) { ex.printStackTrace(); } addOrRemoveWordButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences h=getSharedPreferences("data",MODE_PRIVATE); SharedPreferences.Editor e=h.edit(); try { JSONObject o = new JSONObject(); o.put("status", word.getStatus()); if (word.getStatus() == 1) { o.put("wordName", word.getWordName()); o.put("out", word.getOut()); } else { o.put("wordName", word.getWordName()); o.put("phTtsMp3", word.getPhTtsMp3()); JSONArray a = new JSONArray(word.getWordMean()); o.put("wordMean", a.toString()); } JSONArray jsonArray = new JSONArray(h.getString(unknownWordTag,"[]")); if (state==0) { jsonArray.put(o); e.putString(unknownWordTag,jsonArray.toString()); addOrRemoveWordButton.setText("从生词本中移除"); state=1; } else { for (int i=0;i<jsonArray.length();i++) { JSONObject p=jsonArray.getJSONObject(i); if ( p.getString("wordName").equals(word.getWordName())) { jsonArray.remove(i); break; } } e.putString(unknownWordTag,jsonArray.toString()); addOrRemoveWordButton.setText("加入生词本"); state=0; } e.commit(); }catch (JSONException ex) { ex.printStackTrace(); } } }); } void setUp() { word = (Word) getIntent().getSerializableExtra("word"); wordTextView.setText(word.getWordName()); try { if (word.getStatus()==0) { List<String> meanList=word.getWordMean(); String meanText=""; for (int i=0;i<meanList.size();i++) { meanText+=meanList.get(i)+"\n"; } meanTextView.setText(meanText); if (isNetworkConnected(vocabularyActivity.this.getApplicationContext())) { mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(word.getPhTtsMp3()); mediaPlayer.prepare(); soundButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } } }); } else { soundButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(vocabularyActivity.this,"当前网络不可用",0).show(); } }); } } else { soundButton.setAlpha(0); String out=word.getOut(); out=out.replace("<br/>",""); if (out.equals(word.getWordName())) { meanTextView.setText("没有该词的解释"); } else { meanTextView.setText(out); } } } catch (IOException e) { e.printStackTrace(); } } public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; } }
--------------------------------------------------------------
public class wordListAdapter extends ArrayAdapter<String> { private int resourceID; public wordListAdapter(Context context, int resource , List<String> objects) { super(context, resource,objects); resourceID=resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { String HistoryWord=getItem(position); View view= LayoutInflater.from(getContext()).inflate(resourceID,null); TextView wordName=(TextView)view.findViewById(R.id.wordListTextView); wordName.setText(HistoryWord); return view; } }
----------------------------------------------------------
import com.victor.loading.rotate.RotateLoading; public class MainActivity extends AppCompatActivity { static String searchHistoryTag; ArrayList<String> historyData; ListView historyListView; EditText searchEditText; Button searchButton; RotateLoading loading; @Override protected void onStart() { super.onStart(); getDelegate().onStart(); loadSearchWord(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loading= findViewById(R.id.rotateloading); historyData=new ArrayList<>(); searchEditText=(EditText)findViewById(R.id.searchEditText); historyListView=(ListView)findViewById(R.id.historyListView); searchButton=(Button)findViewById(R.id.searchButton); historyListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { searchEditText.setText(historyData.get(position)); if (isNetworkConnected(MainActivity.this.getApplicationContext())) { loading.start(); new Thread(networkTask).start(); } else { Toast.makeText(MainActivity.this,"当前网络不可用",0).show(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } public void search(View view) { if (isNetworkConnected(MainActivity.this.getApplicationContext())) { historyListView.setClickable(false); searchButton.setClickable(false); String w=searchEditText.getText().toString().replace(" ",""); if (!w.equals("")) { new Thread(networkTask).start(); loading.start(); } } else { Toast.makeText(MainActivity.this,"当前网络不可用",0).show(); } } Runnable networkTask = new Runnable() { @Override public void run() { postSearch(); } }; private void postSearch() { BufferedReader reader = null; StringBuffer sbf = new StringBuffer(); try { String wordName=searchEditText.getText()+""; URL url = new URL("http://fy.iciba.com/ajax.php?a=fy"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setRequestMethod("POST"); String data = "f=auto&t=auto&w="+wordName; connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); connection.setDoOutput(true); OutputStream outputStream = connection.getOutputStream(); outputStream.write(data.getBytes()); int responseCode = connection.getResponseCode(); if(responseCode ==200){ InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead = null; while ((strRead = reader.readLine()) != null) { sbf.append(strRead); sbf.append("\r\n"); } reader.close(); Word word=jsonDecode(sbf.toString(),wordName); recordSearchWord(wordName); Intent intent = new Intent(); intent.setClass(MainActivity.this, vocabularyActivity.class); Bundle bundle=new Bundle(); bundle.putSerializable("word",word); intent.putExtras(bundle); MainActivity.this.startActivity(intent); } else { mHandler.sendEmptyMessage(1); return; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mHandler.sendEmptyMessage(0); } private Handler mHandler = new Handler() { public void handleMessage (Message msg) {//此方法在ui线程运行 switch(msg.what) { case 0: loading.stop(); searchButton.setClickable(true); historyListView.setClickable(true); break; case 1: Toast.makeText(MainActivity.this,"无法搜索",0).show(); break; } } }; @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.UnknownWord: Intent intent = new Intent(); intent.setClass(MainActivity.this, UnknownWordActivity.class); MainActivity.this.startActivity(intent); break; case R.id.clearHistory: SharedPreferences h=getSharedPreferences("data",MODE_PRIVATE); SharedPreferences.Editor e=h.edit(); e.remove(searchHistoryTag); e.commit(); loadSearchWord(); break; } return true; } private Word jsonDecode(String json,String wordName) { Word word = new Word(); try { JSONObject jsonObject = new JSONObject(json); int status = jsonObject.getInt("status"); JSONObject contentJson = jsonObject.getJSONObject("content"); word.setStatus(status); if (status==1) { word.setOut(contentJson.getString("out")); } else { JSONArray wordMeanJsonArray = contentJson.getJSONArray("word_mean"); List<String> wordMeanList=new ArrayList<>(); for (int i=0;i<wordMeanJsonArray.length();i++) { wordMeanList.add(wordMeanJsonArray.getString(i)); } word.setWordMean(wordMeanList); word.setPhTtsMp3(contentJson.getString("ph_tts_mp3")); } word.setWordName(wordName); return word; } catch (JSONException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return word; } private void loadSearchWord() { historyData.clear(); SharedPreferences h=getSharedPreferences("data",MODE_PRIVATE); try { JSONArray jsonArray = new JSONArray(h.getString(searchHistoryTag,"[]")); for (int i = 0; i < jsonArray.length(); i++) { historyData.add(jsonArray.getString(i)); } wordListAdapter ad=new wordListAdapter(MainActivity.this,R.layout.historylistlayout,historyData); historyListView.setAdapter(ad); } catch (Exception e) { e.printStackTrace(); } } private void recordSearchWord(String searchWord) { historyData.clear(); SharedPreferences h=getSharedPreferences("data",MODE_PRIVATE); SharedPreferences.Editor e=h.edit(); try { JSONArray jsonArray = new JSONArray(h.getString(searchHistoryTag,"[]")); for (int i = 0; i < jsonArray.length(); i++) { historyData.add(jsonArray.getString(i)); } for (int i=0;i<historyData.size();i++) { if (historyData.get(i).equals(searchWord)) { historyData.remove(i); break; } } historyData.add(0,searchWord); JSONArray newJsonArray = new JSONArray(historyData); e.putString(searchHistoryTag,newJsonArray.toString()); e.commit(); } catch (Exception ex) { ex.printStackTrace(); } } public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; } }
---------------------------------
public class Word implements Serializable { private String out; private String wordName; private int status; private String phTtsMp3; private List<String> wordMean; public void setOut(String out) { this.out = out; } public String getOut() { return out; } public void setWordName(String wordName) { this.wordName = wordName; } public String getWordName() { return wordName; } public void setStatus(int status) { this.status = status; } public int getStatus() { return status; } public void setPhTtsMp3(String phTtsMp3) { this.phTtsMp3 = phTtsMp3; } public String getPhTtsMp3() { return phTtsMp3; } public void setWordMean(List<String> wordMean) { this.wordMean = wordMean; } public List<String> getWordMean() { return wordMean; } }
---------------------------------------------
activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:layout_toLeftOf="@+id/searchButton" android:layout_marginRight="0dp" android:hint="输入单词或句子" android:id="@+id/searchEditText" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <Button android:id="@+id/searchButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="0dp" android:text="搜索" android:layout_alignParentRight="true" android:layout_centerHorizontal="true" android:onClick="search"/> </RelativeLayout> <TextView android:text="历史记录" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView2" /> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/historyListView"/> </LinearLayout> <com.victor.loading.rotate.RotateLoading android:id="@+id/rotateloading" android:layout_width="80dp" android:layout_height="80dp" app:loading_width="5dp" app:loading_color="#2522e6" android:layout_centerInParent="true"/> </RelativeLayout>
-------------------------------
activity_nukonw_word
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_unkonw_word" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <ListView android:id="@+id/unknownWordListView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </LinearLayout>
----------------------------------------------------------
activity_vocabulary
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_vocabulary" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:orientation="vertical" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/wordTextView" android:textSize="24sp" /> <Button android:text=" " android:layout_width="20dp" android:layout_height="20dp" android:id="@+id/soundButton" android:textSize="10sp" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical" android:background="@drawable/sound"/> </LinearLayout> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/meanTextView" /> <Button android:text="加入生词本" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/addOrRemoveWordButton" /> </LinearLayout>
-------------------------------------------------------------
historylistlayout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="TextView" android:layout_width="wrap_content" android:layout_height="60dp" android:id="@+id/wordListTextView" android:layout_weight="1" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:textSize="18sp" /> </LinearLayout>
-----------------------------------------------------------
menu
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <group android:id="@+id/group2" > <item android:id="@+id/UnknownWord" android:title="生词本"> </item> <item android:id="@+id/clearHistory" android:title="删除所有历史记录"> </item> </group> </menu>
dimen.xml
<resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> </resources>
权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
依赖
compile 'com.victor:lib:1.0.4'