在Android应用程序上打印PHP Echo

时间:2017-06-29 17:30:46

标签: php android admob

我试图在android代码中实现一种打印json echo的方法;但不仅仅是一个简单的回声,而是一个adob代码;所以admob广告单元将在服务器的json文件中,我把它调成android代码如下:Json文件如下:

{
"ads":{     
    "inter":"ca-app-pub-3940256099942544/1033173712"
}
}

有可能这样做吗?所以我可以从服务器中的文件更改admob代码而不更新商店中的应用程序? 如果是这样,android代码将负责将该字符串提取到应用程序中。

我的代码是:

public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;

private List<Song> songList;
private SongAdapter songAdapter;

// URL of object to be parsed
String JsonURL = "http://xxxxx.com/ads.json";
// This string will hold the results
String data = "";
RequestQueue requestQueue;
//TODO: full screen ad
private InterstitialAd mInterstitialAd;
//TODO: selected item
private int mPosition;

String[] names = {"test1", "test2", "test3", "test4", "test5", "test6"};

String[] singers = {"test1", "test2", "test3", "test4", "test5", "test6"};

int[] pics = {
        R.drawable.tip1,
        R.drawable.tip1,
        R.drawable.tip1,
        R.drawable.tip1,
        R.drawable.tip1,
        R.drawable.tip1};



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    setupActionBar();

    requestQueue = Volley.newRequestQueue(this);
    JsonObjectRequest obreq = new JsonObjectRequest(Request.Method.GET, JsonURL,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONObject obj = response.getJSONObject("ads");

                        String Inter = obj.getString("inter");
                        data = Inter;

                    }
                    catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Volley", "Error");
                }
            }
    );
    requestQueue.add(obreq);

    //Use this setting to improve performance if you know that changes in
    //the content do not change the layout size of the RecyclerView
    if (mRecyclerView != null) {
        mRecyclerView.setHasFixedSize(true);
    }

    //using a linear layout manager
    mLayoutManager = new LinearLayoutManager(this);

   //use this in case of gridlayoutmanager
   //mLayoutManager = new GridLayoutManager(this,2);

   //use this in case of Staggered GridLayoutManager
   //mLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);


     mRecyclerView.setLayoutManager(mLayoutManager);

    //intializing an arraylist called songlist
    songList = new ArrayList<>();

    //adding data from arrays to songlist
    for (int i = 0; i < names.length; i++) {
        Song song = new Song(names[i], singers[i], i + 1, pics[i]);
        songList.add(song);
    }
    //initializing adapter
    songAdapter = new SongAdapter(songList);

    //specifying an adapter to access data, create views and replace the content
    mRecyclerView.setAdapter(songAdapter);
    songAdapter.notifyDataSetChanged();

    mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {

        @Override
        public void onItemClick(View view, int position) {
            // TODO: check condition it should whether show ad or not
            Integer[] adPositions = {1,2}; // list of ad positions

            if (!Arrays.asList(adPositions).contains(position)) {
                goToItem(position);
                return;
            }

            // TODO: check ad is loaded before showing
            if (mInterstitialAd.isLoaded()) {
                mPosition = position;
                mInterstitialAd.show();
            } else {
                goToItem(position);
            }
        }
    }));


    // TODO:init ad
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId(data);
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            requestNewInterstitial();
            goToItem(mPosition);
        }
    });

    //TODO: load new ad
    requestNewInterstitial();
}

//TODO: load new ad
private void requestNewInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
            .build();
    mInterstitialAd.loadAd(adRequest);
}

//TODO: open item at position
private void goToItem(int position) {
    switch (position) {
        case 0:
            startActivity(new Intent(MainActivity.this, Test1Activity.class));
            break;
        case 1:
            startActivity(new Intent(MainActivity.this, Test2Activity.class));
            break;
        case 2:
            startActivity(new Intent(MainActivity.this, Test3Activity.class));
            break;
        case 3:
            startActivity(new Intent(MainActivity.this, Test4Activity.class));
            break;
        case 4:
            startActivity(new Intent(MainActivity.this, Test5Activity.class));
            break;
        case 5:
            startActivity(new Intent(MainActivity.this, Test6Activity.class));
            break;
        default:
            break;
    }
}

private void setupActionBar() {
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        // Show the Up button in the action bar.
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}



}

修改

代码工作正常,但有一件事是应用程序崩溃(有时候)当我点击打开一个活动,该活动将显示插入到项目之前的插页式广告代码。我不希望应用程序崩溃。

我认为有时候无法连接到服务器,这就是它崩溃的原因(这只在插页式广告上),nativeExpress总是很好连接或不连接。

我不希望该应用程序崩溃,无论如何都要验证与服务器的连接,或者如果成功则强制它首先连接到服务器&gt;加载&gt;节目 如果没有连接到服务器,只需忽略并转到该项目。

1 个答案:

答案 0 :(得分:0)

PHP中的

echo通过HTTP(S)连接向客户端发送文本。

因此,据我所知,您希望从服务器检索admob id,以使用特定的id值显示admob横幅。

要检索一些数据,您可以使用任何所需的库。

,例如,排球https://developer.android.com/training/volley/simple.html

final TextView mTextView = (TextView) findViewById(R.id.text);
...

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        // Display the first 500 characters of the response string.
        mTextView.setText("Response is: "+ response.substring(0,500));
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        mTextView.setText("That didn't work!");
    }
});
// Add the request to the RequestQueue.
queue.add(stringRequest);

或,JSOUP库https://jsoup.org/download

`compile 'org.jsoup:jsoup:1.10.2'`

用法

Document doc = Jsoup.connect(URL).get();

修改

我想说,只有在检索data变量(即admob键)后才需要初始化插页式广告。

我是您当前的代码,您在检索回调之前尝试初始化interstital。

我能提出什么建议?

在成功回调中移动初始化。

即,

@Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONObject obj = response.getJSONObject("ads");

                        String Inter = obj.getString("inter");
                        data = Inter;
//HERE YOU NEW CODE

mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(data);
mInterstitialAd.setAdListener(new AdListener() {
    @Override
    public void onAdClosed() {
        requestNewInterstitial();
        goToItem(mPosition);
    }
});

requestNewInterstitial();

//新代码结束                         }                         catch(JSONException e){                             e.printStackTrace();                         }                     }

不要忘记从前一个位置删除此注入;)